1. The Field of the Invention
The present invention relates to software development technology. More specifically, the present invention relates to analyzing a software assembly to determine if the software assembly was developed in accordance with a set of development rules.
2. Background and Related Art
Computers have revolutionized the way we work and play. There are an enormous variety of functions and applications that may be implemented by a general purpose computing system in response to the execution of a software application. The utility and functionality of the computing system does, however, rely on the proper coding of the source code that was compiled or interpreted into the binary instructions that are actually executed by the processor. If there is a coding or design error, this will often result in a deviation from expected behavior.
Extraordinary efforts are currently in place to reduce the number of unexpected performance deviations in many software applications before and after the software applications are shipped to market. However, the creativity of software programmers and designers has led to increasingly complex and powerful software applications. As the complexity of the software application increases, so often does the number of lines of source code needed to generate the software application.
Accordingly, it is often advantageous to develop software in accordance with a set of design guidelines. This helps insure that a module of a software application is developed in a similar manner even if different programmers and/or designers work on the module. During development of a software application, there are frequently a number of different design guidelines that may be appropriate. That is, there is often no “right way” or “wrong way” to develop a software application. However, to further streamline the development process, a set of uniform design guidelines are often selected. Use of uniform design guidelines allows designers and programmers to move between the development of different modules of a software application without having to re-learn design guidelines for each module.
Unfortunately, when a software application is developed, there is often no mechanism for efficiently distributing a complete set of uniform design guidelines to all the designers and programmers developing the software application. For example, different portions of uniform design guidelines may be distributed in an ad-hoc manner across a number of different publications and Web sites. In some cases, certain designers or programmers may know the complete set of uniform design guidelines (or portions thereof) and distribute information about the uniform design guidelines only when questioned by other designers or programmers. Distribution of uniform design guidelines across publications, Web sites, and word of mouth is inefficient and often proves insufficient for large development groups.
Further, even when a designer or programmer is aware of uniform design guidelines, there may be no way to determine if the designer or programmer is adhering to the uniform design guidelines. For example, even though a programmer is aware that method names should adhere to Pascal Casing (i.e., capitalizing the first letter of each new word), the programmer may none-the-less program and compile a module that uses some other naming convention. Once a module is compiled, it may be difficult to determine whether or not the module adheres to uniform design guidelines.
Accordingly, some mechanisms have been developed to automatically check a compiled module to determine if the compiled module was designed and programmed in accordance with uniform design guidelines. These mechanisms typically include a software tool that is programmed and compiled to include logic for the uniform design guidelines that are to be checked. The software tool receives a compiled module as input and applies the included logic to attempt to determine if the compiled module adheres to the uniform design guidelines represented by the logic. However, to utilize such a software tool, methods for accessing the functionality of the software tool (commonly referred to as a “hooks”) must be included in a compiled module. Further, when uniform design guidelines change, the software tool (and potentially modules with corresponding hooks to the software tool) must be re-coded and recompiled. Alternately, a software tool can be configured to directly analyze source code or machine language. However, use of source code analysis tools makes multi-language analysis very difficult as an analysis tool is typically configured for use with a single programming langue. Also, during compilation from source code to machine language some information is lost. Accordingly, machine language analysis tools may not be able to analyze all the aspects of a module.
Thus, a programmer may need to maintain multiple versions of source code, for example, a production version and a test version that includes hooks for the software tool. Unfortunately, when non-adherence to uniform design guidelines is identified in the test version, there is no guarantee that corrections will be incorporated into the production version. Further, due to human error, a test version may in fact differ from the production version. Thus, the software tool may identify non-adherence in a test version, while a corresponding production version in fact adheres to the uniform design guidelines. On the other hand, the software tool can indicate that a test version adheres to uniform design guidelines, while a corresponding production version does not adhere to uniform design guidelines. Accordingly, what would be advantageous are mechanisms for analyzing a particular software assembly to determine if the particular software assembly was developed in accordance with specified rules.